<?php

class Rjson {

    private static function encode($t) {
        $t = str_replace("\\", "\\\\", $t);

        // Linieskift (is�r i MySQL)
        $t = str_replace("\n", "\\n", $t);
        $t = str_replace("\r", "\\r", $t);
        $t = str_replace("\t", "\\t", $t);

        $t = str_replace('"', '\"', $t);
        return $t;
    }

    private static function keyEncode($t) {
        $t = str_replace("\\", "", $t);
        $t = str_replace('"', '', $t);
        return $t;
    }

    private static function makeData($key, $value) {

        $retur = chr(10) . chr(10) . "\"" . self::keyEncode($key) . "\":";

        if (is_array($value)) {

            $retur.=self::makeDataArray($value);
        } elseif ($value === null) {

            $retur.="null";
        } elseif (is_bool($value)) {

            if ($value == false) {
                $retur.="false";
            } else {
                $retur.="true";
            }
        } elseif (is_numeric($value)) {

            if ($value > 2147483647) {
                $retur.="\"" . str_ireplace("-", "", str_ireplace("+", "", $value)) . "\"";
            } else {
                $retur.=$value / 1;
            }
        } else {

            $retur.= "\"" . self::encode($value) . "\"";
        }

        return $retur;
    }

    private static function makeDataArray($array) {
        $retur = "{";
        if (is_array($array) && count($array)>0) {

            foreach (array_keys($array) as $ak) {

                $retur.=self::makeData($ak, $array[$ak]);
                $retur.= ",";
            }
            // Sikring hvis tomt array
            if (strlen($retur)>1) {
                $retur = substr($retur, 0, strlen($retur) - 1);
            }
        }
        $retur.= "}";
        
                
        return $retur;
    }

    public static function arrayToJSON($array) {

        $retur = "{";

        if (is_array($array) && count($array)>0) {
            foreach (array_keys($array) as $ak) {

                $retur.=self::makeData($ak, $array[$ak]);
                $retur.= ",";
            }

            $retur = substr($retur, 0, strlen($retur) - 1);
        }

        $retur.="}";
        
        
        return $retur;
    }

    public static function JSONToArray($json) {
        $tmp = json_decode($json, true);
        return $tmp;
    }

}